import redis

# r = redis.StrictRedis(host='localhost', port=6379, db=0)
# r.set('foo', 'bar')
# print(r.get('foo'))

# redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令，Redis 是 StrictRedis 的子类，用于向后兼用旧版本。
# redis 取出的结果默认是字节，我们可以设定 decode_responses=True 改成字符串。
# r = redis.Redis(host='localhost', port=6379, decode_responses=True)
# r.set('name', 'runoob')  # 设置 name 对应的值
# print(r['name'])
# print(r.get('name'))  # 取出键 name 对应的值
# print(type(r.get('name')))  # 查看类型

# 连接池
# redis-py 使用 connection pool 来管理对一个 redis server 的所有连接，避免每次建立、释放连接的开销。
# 默认，每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池，然后作为参数 Redis，这样就可以实现多个 Redis 实例共享一个连接池。
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# r.set('name', 'ftl2200')
# name = r.get('name')
# print(name)

# redis 基本命令 String
# set(name, value, ex=None, px=None, nx=False, xx=False)
# 在 Redis 中设置值，默认，不存在则创建，存在则修改。
# 参数：
# ex - 过期时间（秒）
# px - 过期时间（毫秒）
# nx - 如果设置为True，则只有name不存在时，当前set操作才执行
# xx - 如果设置为True，则只有name存在时，当前set操作才执行

# 1.ex - 过期时间（秒） 这里过期时间是3秒，3秒后p，键food的值就变成None
# r.set("name", 'super', ex=3)
# print(r.get('name'))

# 2.px - 过期时间（豪秒） 这里过期时间是3豪秒，3毫秒后，键foo的值就变成None
# r.set('name', 'super', px=3)
# print(r.get('name'))

# 3.nx - 如果设置为True，则只有name不存在时，当前set操作才执行 （新建）
# r.set('name', 'super')
# print(r.set('name', 'super', nx=True))

# 4.xx - 如果设置为True，则只有name存在时，当前set操作才执行 （修改）
# print(r.set('name', 'super', xx=True))

# 5.setnx(name, value)
# 设置值，只有name不存在时，执行设置操作（添加）
# print(r.setnx('name', 'super'))

# 6.setex(name, time, value)
# 设置值
# 参数：
# time - 过期时间（数字秒 或 timedelta对象）
# print(r.setex('age', 3, "18"))

# 7.psetex(name, time_ms, value)
# 设置值
# 参数：
# time_ms - 过期时间（数字毫秒 或 timedelta对象）
# print(r.psetex('age', 3, '18'))

# 8.mset(*args, **kwargs)
# 批量设置值
# 9.mget(keys, *args)
# 批量获取
# r.mset({'k1': 'v1', 'k2': 'v2'})
# print(r.mget("k1", "k2"))  # 一次取出多个键对应的值

# 10.getset(name, value)
# 设置新值并获取原来的值
# print(r.getset('name', 'wenchao'))
# print(r.get('name'))

print(r.keys())

r.delete('k1')
print(r.keys())
